Skip to content

CM-68944: Fetch AI guardrail config from the platform - #541

Open
Ilanlido wants to merge 4 commits into
mainfrom
CM-68944-guardrails-config-cache
Open

CM-68944: Fetch AI guardrail config from the platform #541
Ilanlido wants to merge 4 commits into
mainfrom
CM-68944-guardrails-config-cache

Conversation

@Ilanlido

@Ilanlido Ilanlido commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

Enforcement config (per-agent Off/Report/Block modes and sensitive-path globs) is now platform-owned. session-start fetches the tenant's resolved config into ~/.cycode/ai-guardrails-config.json (TTL- and tenant-gated); scans only read the cache and overlay it onto the local policy, so the hot path never touches the network. No cache means built-in Report defaults, always synchronous.

  • An event whose guardrails are all Off exits before any scan, event or auth.
  • The two FileRead guardrails (content scan, sensitive path) keep independent modes via a per-check action.
  • ai-guardrails.yaml is reduced to operational knobs (timeout, max bytes, fail_open); enforcement keys older CLIs wrote are stripped, and --mode on install is deprecated.
  • Atomic write and corrupt-file quarantine are shared helpers in path_utils.

…cally

Enforcement config (per-agent Off/Report/Block modes and sensitive-path globs)
is now platform-owned. session-start fetches the tenant's resolved config into
~/.cycode/ai-guardrails-config.json (TTL- and tenant-gated); scans only read the
cache and overlay it onto the local policy, so the hot path never touches the
network. No cache means built-in Report defaults, always synchronous.

- An event whose guardrails are all Off exits before any scan, event or auth.
- The two FileRead guardrails (content scan, sensitive path) keep independent
  modes via a per-check action.
- ai-guardrails.yaml is reduced to operational knobs (timeout, max bytes,
  fail_open); enforcement keys older CLIs wrote are stripped, and --mode on
  install is deprecated.
- Atomic write and corrupt-file quarantine are shared helpers in path_utils.

Co-Authored-By: Claude Code <noreply@anthropic.com>

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.

Tip: disable this comment in your organization's Code Review settings.

Altruistus and others added 2 commits September 7, 2026 13:00
Both sides touched session start. CM-71972 added skills collection to the
session sweep; this branch added the guardrail config fetch. The import block
takes both, and the two independent test blocks are kept side by side.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Comment thread cycode/cli/apps/ai_guardrails/scan/consts.py Outdated
Comment thread cycode/cli/apps/ai_guardrails/scan/consts.py Outdated
Comment thread cycode/cli/apps/ai_guardrails/scan/guardrail_config.py Outdated
Comment thread cycode/cli/apps/ai_guardrails/scan/handlers.py Outdated
Comment thread cycode/cli/apps/ai_guardrails/scan/policy.py
Comment thread cycode/cli/apps/ai_guardrails/scan/policy.py Outdated
Review follow-up on the guardrail config cache.

DEFAULT_POLICY carried prompt/file_read/mcp enforcement keys that the platform
overlay overwrites on every scan, so they were dead defaults the installer still
wrote into the user's ai-guardrails.yaml. It now holds knobs only, with the
sensitive-path fallback list moved to DEFAULT_SENSITIVE_PATH_GLOBS.

load_policy whitelists the keys a local file may contribute instead of stripping
the ones it may not. The strip-list had already missed mcp.scan_arguments, which
let a repo-level file switch off MCP argument scanning; a whitelist cannot miss a
key. strip_platform_managed_keys stays for the write path only, where it drops
platform sections while keeping whatever else the user put in the file.

The handlers' `enabled` gates and the mcp scan_arguments gate go with them:
nothing could set them any more, and an all-Off event is skipped in scan_command.

The matrix cell vocabulary becomes GuardrailCellMode, kept apart from
GuardrailsMode so Off does not leak into `ai-guardrails install --mode`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants